﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
//单值二叉树

//bool isUnivalTree(struct TreeNode* root)
//{
//	if (root == NULL)
//		return true;
//	if (root->left && root->left->val != root->val)
//	{
//		return false;
//	}
//	if (root->right &&root->right->val != root->val)
//	{
//		return false;
//	}
//	return isUnivalTree(root->left) &&
//		isUnivalTree(root->right);
//}
//
////相同的树
//
//bool isSameTree(struct TreeNode*p,struct TreeNode*q
//{
////都为空
//if (p == NULL && q == NULL)
//{
//	return true;
//}
////其中一个为空
//if (p==NULL ||q==NULL)
//{
//	return false;
//}
//if (p->val != q->val)
//{
//	return false;
//}
//return isSameTree(p->left, q->left)
//&& isSameTree(p->right, q->right);
//}
//
////
////输出型参数
//
//void preorder(struct TreeNode* root, int* a, int* pi)
//{
//	if (root == NULL)
//		return;
//	a[(*pi)++] = root->val;
//	preorder(root->left, a,pi);
//	preorder(root->right, a,pi);
//
//}
//int TreeSize(struct TreeNode* root)
//{
//	return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
//
//}
//int* preorderTraversal(struct TreeNode* root, int* returnSize)
//{
//	int n = TreeSize(root);
//	int* a = (int*)malloc(sizeof(int) * n);
//	*returnSize = n;
//	int i = 0;
//	preorder(root, a,&i);
//	return a;
//}
//
 

//对称二叉树

//bool _isSymmetric(struct TreeNode* root1, struct TreeNode* root2)
//{
//	if (root1 == NULL && root2 == NULL)
//		return true;
//	//一个为空，一个不为空
//	if (root1 == NULL || root2 == NULL)
//		return false;
//	//都不为空
//	if (root1->val != root2->val)
//	{
//		return false;
//	}
//	return _isSymmetric(root1->left, root2->right)
//		&& _isSymmetric(root1->right, root2->left);
//
//}
//
//bool isSymmetric(struct TreeNode* root)
//{
//	return _isSymmetric(root->left, root->right);
//
//}
//
////另一颗树的子树
// 
//bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
//	if (p == NULL && q != NULL)
//		return false;
//	if (p != NULL && q == NULL)
//		return false;
//	if (p == NULL && q == NULL)
//		return true;
//
//	if (p->val == q->val)
//		return  isSameTree(p->left, q->left)
//		&& isSameTree(p->right, q->right);
//	else
//		return false;
//}
//
//bool isSubtree(struct TreeNode* s, struct TreeNode* t) {
//	if (s == NULL)
//		return false;
//	//根相同，判断当前这个树是否和t相同
//	if (isSameTree(s, t))
//		return true;
//	return isSubtree(s->left, t)
//		|| isSubtree(s->right, t);
//}
//
